home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / GoldED / Add-Ons / envRCS09 / rcs / arexx / checkin.ged next >
Text File  |  1999-07-06  |  17KB  |  710 lines

  1. /* $VER: 1.0, ©1997 Dietmar Eilert. Check in file. */
  2.  
  3. OPTIONS RESULTS                             /* enable return codes     */
  4.  
  5. arg MODE
  6.  
  7. if (LEFT(ADDRESS(), 6) ~= "GOLDED") then    /* not started by Golden ? */
  8.     address 'GOLDED.1'
  9.  
  10. 'LOCK CURRENT RELEASE=4'                    /* lock GUI, gain access   */
  11.  
  12. if (RC ~= 0) then
  13.     exit
  14.  
  15. OPTIONS FAILAT 6                            /* ignore warnings         */
  16.  
  17. SIGNAL ON SYNTAX                            /* ensure clean exit       */
  18.  
  19. /* ------------------------ INSERT YOUR CODE HERE: ------------------- */
  20.  
  21. 'QUERY BITS'
  22.  
  23. if (index(RESULT, "W") = 0) then
  24.  
  25.     'REQUEST PROBLEM="File is write-protected."'
  26.  
  27. else do
  28.  
  29.     call rcs_login
  30.  
  31.     call rcs_readcfg
  32.  
  33.     /* check if file belongs to current project */
  34.  
  35.     'QUERY FILE VAR=NAME'
  36.  
  37.     if (CONFIG.CFG_FILES ~= 0) then do
  38.  
  39.         do FILE = 1 to CONFIG.CFG_FILES
  40.  
  41.             if (CONFIG.CFG_SETUP.FILE = NAME) then do
  42.  
  43.                 call rcs_checkin MODE
  44.  
  45.                 call rcs_exit
  46.             end
  47.         end
  48.     end
  49.  
  50.     /* add new file to project */
  51.  
  52.     'REQUEST TITLE="' || NAME || '" BODY="File doesn''t belong to this project.*nWould you like to add it ?" BUTTON="!ADD|_Cancel"'
  53.  
  54.     if ((RC = 0) & (RESULT = 1)) then do
  55.  
  56.         FILE = CONFIG.CFG_FILES + 1
  57.  
  58.         CONFIG.CFG_FILES = FILE
  59.  
  60.         CONFIG.CFG_SETUP.FILE = NAME
  61.  
  62.         call rcs_savecfg
  63.  
  64.         call rcs_checkin MODE
  65.     end
  66. end
  67.  
  68. /* ---------------------------- END OF YOUR CODE --------------------- */
  69.  
  70. 'UNLOCK' /* VERY important: unlock GUI */
  71.  
  72. exit
  73.  
  74. SYNTAX:
  75.  
  76. SAY "Sorry, error line" SIGL ":" ERRORTEXT(RC) ":-("
  77.  
  78. 'UNLOCK'
  79.  
  80. exit
  81.  
  82. /* /// "rcs_login" */
  83.  
  84. rcs_login: procedure expose CONFIG.
  85.  
  86.     if ((exists("rcs:ci") = 0) | (exists("rcs:co") = 0) | (exists("rcs:rcs") = 0) | (exists("rcs:setuprcs") = 0)) then do
  87.  
  88.         'REQUEST PROBLEM="File(s) missing - Please install and|configure HWRCS before you continue"'
  89.  
  90.         call rcs_exit
  91.     end
  92.  
  93.     'QUERY $LOGNAME VAR=LOGNAME'
  94.  
  95.     if (INDEX(LOGNAME, " ") ~= 0) then do
  96.  
  97.         'REQUEST PROBLEM="User name contains invalid character.*nPlease note that the user name should*nbe like a login name (*"bill*") or an*ne-mail address and not like your real*nname."'
  98.  
  99.         LOGNAME = ""
  100.     end
  101.  
  102.     if ((LOGNAME = "") | (LOGNAME = "0")) then do
  103.  
  104.         if (VERBOSE = "TRUE") then
  105.             'REQUEST PROBLEM="Please log in before you proceed.*nIt is required that every member of your*nworkgroup logs in under a unique name.*nLogin names will be used to keep track of*nthe files used and modified by various*nmembers of your workgroup.*n" BUTTON="!OK"'
  106.         else
  107.             'REQUEST PROBLEM="Please log in before you proceed."'
  108.  
  109.         call rcs_quicklogin
  110.     end
  111.  
  112.     return
  113.  
  114. /* /// */
  115. /* /// "rcs_quicklogin" */
  116.  
  117. rcs_quicklogin: procedure expose CONFIG.
  118.  
  119.     'QUERY $LOGNAME VAR=LOGNAME'
  120.  
  121.     if (INDEX(LOGNAME, " ") ~= 0) then do
  122.  
  123.         'REQUEST PROBLEM="User name contains invalid character.*nPlease note that the user name should*nbe like a login name (*"bill*") or an*ne-mail address and not like your real*nname."'
  124.  
  125.         LOGNAME = ""
  126.     end
  127.  
  128.     if ((LOGNAME = "") | (LOGNAME = "0")) then do
  129.  
  130.         do while ((LOGNAME = "") | (LOGNAME = "0"))
  131.  
  132.             'REQUEST STRING TITLE="Login" VAR=LOGNAME'
  133.  
  134.             if (RC ~= 0) then do
  135.  
  136.                 'UNLOCK'
  137.  
  138.                 exit
  139.             end
  140.  
  141.             if (INDEX(LOGNAME, " ") ~= 0) then do
  142.  
  143.                 'REQUEST PROBLEM="Login name contains invalid character.*nPlease note that the user name should*nbe like a login name (*"bill*") or an*ne-mail address and not like your real*nname."'
  144.  
  145.                 LOGNAME = ""
  146.             end
  147.             else if ((LOGNAME = "") | (LOGNAME = "0")) then
  148.  
  149.                 'REQUEST PROBLEM="Anonymous login not supported"'
  150.  
  151.             else do
  152.  
  153.                 'SET $LOGNAME "' || LOGNAME || '"'
  154.  
  155.                 'REQUEST STATUS="Logged in as ' || LOGNAME || '."'
  156.  
  157.                 break
  158.             end
  159.         end
  160.     end
  161.  
  162.     return
  163.  
  164. /* /// */
  165. /* /// "rcs_readcfg" */
  166.  
  167. rcs_readcfg: procedure expose CONFIG.
  168.  
  169.     'QUERY PATH VAR=PATH'
  170.  
  171.     /* find configuration file */
  172.  
  173.     if (exists(PATH || "RCS_config") = 0) then do
  174.  
  175.         if (exists(PATH || "RCS_root") = 0) then do
  176.  
  177.             PATH = pragma('D')
  178.  
  179.             'EXPAND NAME="' || PATH || '" VAR=PATH'
  180.  
  181.             if (exists(PATH || "RCS_config") = 0) then do
  182.  
  183.                 if (exists(PATH || "RCS_root") = 0) then do
  184.  
  185.                     'REQUEST STATUS="No project in current path !"'
  186.  
  187.                     'REQUEST DIR TITLE="Select project directory:" VAR=PATH'
  188.  
  189.                     if (RC ~= 0) then
  190.  
  191.                         call rcs_exit
  192.  
  193.                     'REQUEST STATUS=""'
  194.                 end
  195.             end
  196.         end
  197.     end
  198.  
  199.     'EXPAND NAME="' || PATH || '" VAR=PATH'
  200.  
  201.     if (exists(PATH || "RCS_root") ~= 0) then do
  202.  
  203.         call rcs_readlink PATH
  204.  
  205.         'EXPAND NAME="' || RESULT || '" VAR=PATH'
  206.     end
  207.  
  208.     if (exists(PATH || "RCS_config") = 0) then do
  209.  
  210.         'REQUEST PROBLEM="No projects in seleted path."'
  211.  
  212.         call rcs_exit
  213.     end
  214.     else do
  215.  
  216.         /* read project configuration */
  217.  
  218.         R = open('CONFIG', PATH || "RCS_config", 'READ')
  219.  
  220.         if (R = 0) then do
  221.  
  222.             'REQUEST PROBLEM="Couldn''t read configuration file"'
  223.  
  224.             call rcs_exit
  225.         end
  226.         else do
  227.  
  228.             CONFIG.CFG_CONFIG   = PATH || "RCS_config"
  229.             CONFIG.CFG_NAME     = ""
  230.             CONFIG.CFG_PATH     = ""
  231.             CONFIG.CFG_COMMENT  = ""
  232.             CONFIG.CFG_SNAPSHOT = ""
  233.             CONFIG.CFG_USERS    = 0
  234.             CONFIG.CFG_LOGIN    = 0
  235.             CONFIG.CFG_FILES    = 0
  236.  
  237.             do forever
  238.  
  239.                 DATA = readln('CONFIG')
  240.  
  241.                 if (eof('CONFIG')) then do
  242.  
  243.                     R = close('CONFIG')
  244.  
  245.                     leave
  246.                 end
  247.                 else do
  248.  
  249.                     if (left(DATA, 6) = "[NAME]") then
  250.  
  251.                         CONFIG.CFG_NAME = readln('CONFIG')
  252.  
  253.                     else if (left(DATA, 6) = "[PATH]") then
  254.  
  255.                         CONFIG.CFG_PATH = readln('CONFIG')
  256.  
  257.                     else if (left(DATA, 10) = "[SNAPSHOT]") then do
  258.  
  259.                         CONFIG.CFG_SNAPSHOT = readln('CONFIG')
  260.                     end
  261.                     else if (left(DATA, 9) = "[COMMENT]") then do
  262.  
  263.                         CONFIG.CFG_COMMENT = readln('CONFIG')
  264.                     end
  265.  
  266.                     else if (left(DATA, 6) = "[USER]") then do
  267.  
  268.                         USERS = 0
  269.  
  270.                         do forever
  271.  
  272.                             DATA = readln('CONFIG')
  273.  
  274.                             if (eof('CONFIG')) then
  275.  
  276.                                 leave
  277.  
  278.                             if (length(compress(DATA, " ;")) = 0) then
  279.  
  280.                                 leave
  281.  
  282.                             else do
  283.  
  284.                                 USERS = USERS + 1
  285.  
  286.                                 CONFIG.CFG_USER.USERS = DATA
  287.                                 CONFIG.CFG_WORK.USERS = CONFIG.CFG_PATH
  288.                             end
  289.                         end
  290.  
  291.                         CONFIG.CFG_USERS = USERS
  292.  
  293.                     end
  294.                     else if (left(DATA, 6) = "[WORK]") then do
  295.  
  296.                         USERS = 0
  297.  
  298.                         do forever
  299.  
  300.                             DATA = readln('CONFIG')
  301.  
  302.                             if (eof('CONFIG')) then
  303.  
  304.                                 leave
  305.  
  306.                             if (length(compress(DATA, " ;")) = 0) then
  307.  
  308.                                 leave
  309.  
  310.                             else do
  311.  
  312.                                 USERS = USERS + 1
  313.  
  314.                                 CONFIG.CFG_WORK.USERS = DATA
  315.                             end
  316.                         end
  317.                     end
  318.                     else if (left(DATA, 7) = "[FILES]") then do
  319.  
  320.                         FILES = 0
  321.  
  322.                         do forever
  323.  
  324.                             DATA = readln('CONFIG')
  325.  
  326.                             if (eof('CONFIG')) then
  327.  
  328.                                 leave
  329.  
  330.                             if (length(compress(DATA, " ;")) = 0) then
  331.  
  332.                                 leave
  333.  
  334.                             else do
  335.  
  336.                                 FILES = FILES + 1
  337.  
  338.                                 CONFIG.CFG_SETUP.FILES = DATA
  339.                             end
  340.                         end
  341.  
  342.                         CONFIG.CFG_FILES = FILES
  343.                     end
  344.                 end
  345.             end
  346.  
  347.             /* check user ID */
  348.  
  349.             'QUERY $LOGNAME VAR=LOGNAME'
  350.  
  351.             if (CONFIG.CFG_USERS ~= 0) then do
  352.  
  353.                 do USER = 1 to CONFIG.CFG_USERS
  354.  
  355.                     if (CONFIG.CFG_USER.USER = LOGNAME) then do
  356.  
  357.                         CONFIG.CFG_LOGIN = USER
  358.  
  359.                         leave
  360.                     end
  361.                 end
  362.  
  363.             end
  364.  
  365.             /* new user ? */
  366.  
  367.             if (CONFIG.CFG_LOGIN = 0) then do
  368.  
  369.                 'REQUEST BODY="You have not been working on this*nproject so far. Would you like to*nbe added as new user ?" BUTTON="!ADD|_Cancel"'
  370.  
  371.                 if ((RC ~= 0) | (RESULT = 0)) then
  372.  
  373.                     call rcs_exit
  374.  
  375.                 else do
  376.  
  377.                     USER = CONFIG.CFG_USERS + 1
  378.  
  379.                     CONFIG.CFG_USERS     = USER
  380.                     CONFIG.CFG_LOGIN     = USER
  381.                     CONFIG.CFG_USER.USER = LOGNAME
  382.                     CONFIG.CFG_WORK.USER = ""
  383.  
  384.                     call rcs_createworkdir USER
  385.  
  386.                     call rcs_savecfg
  387.                 end
  388.             end
  389.         end
  390.     end
  391.  
  392.     return
  393.  
  394. /* /// */
  395. /* /// "rcs_savecfg" */
  396.  
  397. rcs_savecfg: procedure expose CONFIG.
  398.  
  399.     R = open('CONFIG', CONFIG.CFG_CONFIG, 'WRITE')
  400.  
  401.     if (R = 0) then
  402.  
  403.         'REQUEST PROBLEM="Couldn''t save configuration file"'
  404.  
  405.     else do
  406.  
  407.         'QUERY DATE VAR=DATE'
  408.  
  409.         R = writeln('CONFIG', "[NAME]")
  410.         R = writeln('CONFIG', CONFIG.CFG_NAME)
  411.         R = writeln('CONFIG', "")
  412.  
  413.         R = writeln('CONFIG', "[PATH]")
  414.         R = writeln('CONFIG', CONFIG.CFG_PATH)
  415.         R = writeln('CONFIG', "")
  416.  
  417.         R = writeln('CONFIG', "[SNAPSHOT]")
  418.         R = writeln('CONFIG', CONFIG.CFG_SNAPSHOT)
  419.  
  420.         if (CONFIG.CFG_SNAPSHOT ~= "") then
  421.  
  422.             R = writeln('CONFIG', "")
  423.  
  424.         R = writeln('CONFIG', "[COMMENT]")
  425.         R = writeln('CONFIG', CONFIG.CFG_COMMENT)
  426.  
  427.         if (CONFIG.CFG_COMMENT ~= "") then
  428.  
  429.             R = writeln('CONFIG', "")
  430.  
  431.         R = writeln('CONFIG', "[USER]")
  432.  
  433.         if (CONFIG.CFG_USERS ~= 0) then do
  434.  
  435.             do USER = 1 to CONFIG.CFG_USERS
  436.  
  437.                 R = writeln('CONFIG', CONFIG.CFG_USER.USER)
  438.  
  439.             end
  440.         end
  441.  
  442.         R = writeln('CONFIG', "")
  443.  
  444.         R = writeln('CONFIG', "[WORK]")
  445.  
  446.         if (CONFIG.CFG_USERS ~= 0) then do
  447.  
  448.             do USER = 1 to CONFIG.CFG_USERS
  449.  
  450.                 R = writeln('CONFIG', CONFIG.CFG_WORK.USER)
  451.  
  452.             end
  453.         end
  454.  
  455.         R = writeln('CONFIG', "")
  456.  
  457.         R = writeln('CONFIG', "[FILES]")
  458.  
  459.         if (CONFIG.CFG_FILES ~= 0) then do
  460.  
  461.             do FILE = 1 to CONFIG.CFG_FILES
  462.  
  463.                 R = writeln('CONFIG', CONFIG.CFG_SETUP.FILE)
  464.  
  465.             end
  466.         end
  467.  
  468.         R = close('CONFIG')
  469.     end
  470.  
  471.     return
  472.  
  473. /* /// */
  474. /* /// "rcs_exit" */
  475.  
  476. rcs_exit:
  477.  
  478.     'UNLOCK'
  479.  
  480.     exit
  481.  
  482.     return
  483.  
  484. /* /// */
  485. /* /// "rcs_createworkdir" */
  486.  
  487. rcs_createworkdir: procedure expose CONFIG.
  488.  
  489.     parse arg USER
  490.  
  491.     'REQUEST BODY="Please choose your working directory.*nEach member of your workgroup should*nhave a private working directory for*nthis project (on your local machine)." BUTTON="!OK"'
  492.  
  493.     if (RC = 0) then do
  494.  
  495.         do forever
  496.  
  497.             'REQUEST DIR SAVE TITLE="Working directory..." PATH="sys:" VAR=PRJWORK'
  498.  
  499.             if (RC = 0) then do
  500.  
  501.                 'EXPAND NAME="' || PRJWORK || '" VAR=PRJWORK'
  502.  
  503.                 CONFIG.CFG_WORK.USER = PRJWORK
  504.  
  505.                 if (exists(PRJWORK || "rcs_link") = 0) then do
  506.  
  507.                     if (exists(PRJWORK || "rcs_root") = 0) then do
  508.  
  509.                         call rcs_savelink USER
  510.  
  511.                         leave
  512.                     end
  513.                     else
  514.                         'REQUEST PROBLEM="This directory is already used as*nworking directory by another user*nor for another project and can not*nbe selected again."'
  515.                 end
  516.                 else
  517.                     leave
  518.             end
  519.             else
  520.                 call rcs_exit
  521.         end
  522.     end
  523.  
  524.     return
  525.  
  526. /* /// */
  527. /* /// "rcs_savelink" */
  528.  
  529. rcs_savelink: procedure expose CONFIG.
  530.  
  531.     parse arg USER
  532.  
  533.     if (USER ~= 0) then do
  534.  
  535.         PATH = CONFIG.CFG_WORK.USER || 'RCS_root'
  536.  
  537.         R = open('CONFIG', PATH, 'WRITE')
  538.  
  539.         if (R = 0) then
  540.  
  541.             'REQUEST PROBLEM="Failed to save local configuration."'
  542.  
  543.         else do
  544.  
  545.             R = writeln('CONFIG', "[CONFIG]")
  546.  
  547.             R = writeln('CONFIG', CONFIG.CFG_PATH)
  548.  
  549.             R = close('CONFIG')
  550.         end
  551.     end
  552.  
  553.     return
  554.  
  555. /* /// */
  556. /* /// "rcs_readlink" */
  557.  
  558. rcs_readlink: procedure expose CONFIG.
  559.  
  560.     parse arg PATH
  561.  
  562.     R = open('CONFIG', PATH || "RCS_root", 'READ')
  563.  
  564.     if (R = 0) then do
  565.  
  566.         'REQUEST PROBLEM="Couldn''t read configuration file"'
  567.  
  568.         call rcs_exit
  569.     end
  570.     else do forever
  571.  
  572.         DATA = readln('CONFIG')
  573.  
  574.         if (eof('CONFIG')) then do
  575.  
  576.             R = close('CONFIG')
  577.  
  578.             leave
  579.         end
  580.  
  581.         if (eof('CONFIG')) then
  582.  
  583.             leave
  584.  
  585.         if (left(DATA, 8) = "[CONFIG]") then
  586.  
  587.             PATH = readln('CONFIG')
  588.     end
  589.  
  590.     return PATH
  591.  
  592. /* /// */
  593. /* /// "rcs_checkin" */
  594.  
  595. rcs_checkin: procedure expose CONFIG.
  596.  
  597.     parse arg MODE
  598.  
  599.     REVISION = ""
  600.     LOGMSG   = ""
  601.  
  602.     if (MODE = "REVISION") then do
  603.  
  604.         'REQUEST STRING BODY="Please provide a revision (x.y) for this file:" VAR=REVISION'
  605.  
  606.         if (RC ~= 0) then
  607.  
  608.             call rcs_exit
  609.  
  610.         /* RCS doesn't allow spaces (code 32) in identifiers; we use code 160 instead (unbeakable space) */
  611.  
  612.         if (length(REVISION) ~= 0) then do
  613.  
  614.             do N = 1 to length(REVISION)
  615.  
  616.                 if (substr(REVISION, N, 1) = " ") then
  617.  
  618.                     REVISION = overlay(D2C(160), REVISION, N, 1)
  619.             end
  620.         end
  621.     end
  622.  
  623.     'REQUEST STRING BODY="Please provide a log message for this file:" VAR=LOGMSG'
  624.  
  625.     if (RC ~= 0) then
  626.  
  627.         call rcs_exit
  628.  
  629.     'QUERY FILE VAR=NAME'
  630.  
  631.     /* save to project directory */
  632.  
  633.     PATH = CONFIG.CFG_PATH || NAME
  634.  
  635.     'SAVE ALL FORCE EXPORT NAME="' || PATH || '"'
  636.  
  637.     if (exists(PATH) ~= 0) then do
  638.  
  639.         /* check in file */
  640.  
  641.         if (LOGMSG ~= "") then do
  642.  
  643.             if (REVISION ~= "") then
  644.                 'RUN DIR="' || CONFIG.CFG_PATH || '" OUTPUT="NIL:" CMD="rcs:ci *"-r' || REVISION || '*" *"-m' || LOGMSG || '*" *"' || PATH || '*""'
  645.             else
  646.                 'RUN DIR="' || CONFIG.CFG_PATH || '" OUTPUT="NIL:" CMD="rcs:ci *"-m' || LOGMSG || '*" *"' || PATH || '*""'
  647.         end
  648.         else do
  649.  
  650.             if (REVISION ~= "") then
  651.                 'RUN DIR="' || CONFIG.CFG_PATH || '" OUTPUT="NIL:" CMD="rcs:ci *"-r' || REVISION || '*" *"' || PATH || '*""'
  652.             else
  653.                 'RUN DIR="' || CONFIG.CFG_PATH || '" OUTPUT="NIL:" CMD="rcs:ci *"' || PATH || '*""'
  654.         end
  655.  
  656.         /* successful ? */
  657.  
  658.         if (exists(PATH) = 0) then do
  659.  
  660.             /* delete file in work directory */
  661.  
  662.             'QUERY DOC VAR=PATH'
  663.  
  664.             'FILE DELETE FORCE NAME="' || PATH || '"'
  665.  
  666.             /* save copy to snapshot dir */
  667.  
  668.             if (CONFIG.CFG_SNAPSHOT ~= "") then do
  669.  
  670.                 'BITS W=FALSE'
  671.  
  672.                 'SAVE ALL FORCE EXPORT NAME="' || CONFIG.CFG_SNAPSHOT || NAME || '"'
  673.             end
  674.  
  675.             /* clear buffer */
  676.  
  677.             'NEW NONAME FORCE'
  678.         end
  679.         else do
  680.  
  681.             'REQUEST BODY="RCS failed to check in this*nfile. Possible cause: owner*nconflict." BUTTON="!OK|_Verbose|_Cancel"'
  682.  
  683.             if ((RC = 0) & (RESULT = 2)) then do
  684.  
  685.                 /* try again (with output) */
  686.  
  687.                 if (LOGMSG ~= "") then do
  688.  
  689.                     if (REVISION ~= "") then
  690.                         'RUN DIR="' || CONFIG.CFG_PATH || '" CMD="rcs:ci *"-r' || REVISION || '*" *"-m' || LOGMSG || '*" *"' || PATH || '*""'
  691.                     else
  692.                         'RUN DIR="' || CONFIG.CFG_PATH || '" CMD="rcs:ci *"-m' || LOGMSG || '*" *"' || PATH || '*""'
  693.                 end
  694.                 else do
  695.  
  696.                     if (REVISION ~= "") then
  697.                         'RUN DIR="' || CONFIG.CFG_PATH || '" CMD="rcs:ci *"-r' || REVISION || '*" *"' || PATH || '*""'
  698.                     else
  699.                         'RUN DIR="' || CONFIG.CFG_PATH || '" CMD="rcs:ci *"' || PATH || '*""'
  700.                 end
  701.             end
  702.         end
  703.     end
  704.     else
  705.         'REQUEST PROBLEM="Failed to save file to project directory"'
  706.  
  707.     return
  708.  
  709. /* /// */
  710.